def user_info(name, age, gender):
    print(f"姓名是：{name}，年龄是：{age}，性别是{gender}：")
#位置参数，调用函数时按顺序传递。
user_info("tom",20,"male")
#关键字参数
user_info(gender="female",age= 25, name= "lily")#通过参数名明确传递参数值，可以不按顺序传递参数
user_info("cliff", gender="male", age= 28)#位置参数需要在前

#默认参数允许在定义函数时为参数设置默认值。
#调用函数时，如果不传递该参数，则使用默认值。
#默认参数必须放到最后，不能放第一位,否则报错
def tall(name, height=170):
    print(f"姓名： {name}! 身高：{height}")

tall("Alice")
tall("Bob", 180)
# 不定长参数
# 可变位置参数，当你不知道函数将接收多少个位置参数时，可以使用 *args。它将所有额外的位置参数打包成一个元组
def info(*content):
    print(f"content参数的类型是{type(content)}：，内容是：{content}")
info(3, 6, 9, "sam", 'Cate') # 作为元组存在

# 可变关键字参数，**kwargs 用于接收额外的关键字参数，它将这些参数打包成字典。
def user_info_1(**info):
    print(f"info参数的类型是{type(info)}：，内容是：{info}")
#user_info_1("key1", "key2", 1, 2, 3)#必须以键值对形式
user_info_1(name = "alice", age = 20, height = 165)



